#include <stdio.h>
/*
for
循环语句
for(int i = 0; i < 31; i++)
{

}

for(初始化 ; 条件语句 ; 迭代语句)
{
    执行语句
}
执行流程 
    1、执行 初始化
    2、执行 判断语句
        如果语句为真 则执行 执行语句  然后执行迭代语句
        如果语句为则退出循环


*/

/*
函数名print_bit
函数参数
    @num 进行计算的值
函数返回值 无
函数功能
    用于对 num  进行打印二进制
*/
void print_bit(char * str , int num)
{
    printf("%s\n" , str);
    // 1设定一个数 在 第 32 位 为 1 其他位 为 0
    unsigned int mask = 1 << (sizeof(int) * 8 - 1);
    // int mask = 1 << 31;

    // 2让这 i 和设定的值 取 与运算 如果 两个 结果为 非0 则输出 1  为0 则输出0
    for (int i = 0; i < sizeof(int) * 8; i++  )
    {
        // 进行位置掩码判断
        if (num & mask)
        {
            putchar('1');
        }
        else
        {
            putchar('0');
        }
        // 进行移位运算
        mask = mask >> 1;

        // 用于打印空格
        if (((i + 1) % 4) == 0)
        {
            putchar(' ');
        }
    }
    putchar('\n');
}

int main(int argc, char const *argv[])
{
    int GPIO_MODE = 0xCCCCCCCF;
    print_bit("GPIO_MODE" , GPIO_MODE);
    // 清除特定位   清除 第 0 位 和第 1 位
    int M = ~3;
    print_bit("M" , M);
    GPIO_MODE &= M;
    print_bit("GPIO_MODE & M" , GPIO_MODE);
    // 设置特定位   清除 第 1 位 和第 0 位    01
    M = 0x01;
    GPIO_MODE |= M;
    print_bit("GPIO_MODE | M" , GPIO_MODE);

    // 翻转特定位   例如 翻转
    M = 0b1111;
    GPIO_MODE ^= M;
    print_bit("GPIO_MODE ^ M" , GPIO_MODE);


    return 0;
}



